bitkeeper revision 1.227 (3ec23adaE9CVdAKPJKPvT1rqaIUvLA)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Wed, 14 May 2003 12:47:22 +0000 (12:47 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Wed, 14 May 2003 12:47:22 +0000 (12:47 +0000)
processor.h, xen_block.c, schedule.c, network.c, domain.c, dom0_ops.c:
  Renamed free_task_struct to the more descriptive put_task_struct. Fixed several places where put_task_struct isn't called after 'find_domain_by_id'.

xen/common/dom0_ops.c
xen/common/domain.c
xen/common/network.c
xen/common/schedule.c
xen/drivers/block/xen_block.c
xen/include/asm-i386/processor.h

index 52f8b4b1cd27a8fdde0803b9211d05925c3ddb5c..89872251f760b7219b7a4def10e2d01ecfc2048d 100644 (file)
@@ -31,7 +31,7 @@ static unsigned int get_domnr(void)
         domnr = (domnr+1) & ((1<<20)-1);
         if ( (p = find_domain_by_id(domnr)) == NULL )
             return domnr;
-        free_task_struct(p);
+        put_task_struct(p);
     }
 
     return 0;
@@ -79,10 +79,9 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
     case DOM0_BUILDDOMAIN:
     {
         struct task_struct * p = find_domain_by_id(op.u.meminfo.domain);
-        if ( (ret = final_setup_guestos(p, &op.u.meminfo)) != 0 )
-            break;
-        ret = p->domain;
-        free_task_struct(p);
+        if ( (ret = final_setup_guestos(p, &op.u.meminfo)) == 0 )
+            ret = p->domain;
+        put_task_struct(p);
     }
     break;
 
@@ -90,18 +89,19 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
     {
         struct task_struct * p = find_domain_by_id(op.u.meminfo.domain);
         ret = -EINVAL;
-        if ( (p == NULL) || !(p->flags & PF_CONSTRUCTED) )
-            break;
-        wake_up(p);
-        reschedule(p);
-        ret = p->domain;
-        free_task_struct(p);
+        if ( (p != NULL) && (p->flags & PF_CONSTRUCTED) )
+        {
+            wake_up(p);
+            reschedule(p);
+            ret = p->domain;
+        }
+        put_task_struct(p);
     }
     break;
 
     case DOM0_STOPDOMAIN:
     {
-      ret = stop_other_domain (op.u.meminfo.domain);
+        ret = stop_other_domain (op.u.meminfo.domain);
     }
     break;
 
@@ -123,8 +123,8 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
             goto exit_create;
 
        if (op.u.newdomain.name[0]) {
-         strncpy (p -> name, op.u.newdomain.name, MAX_DOMAIN_NAME);
-         p -> name[MAX_DOMAIN_NAME - 1] = 0;
+            strncpy (p -> name, op.u.newdomain.name, MAX_DOMAIN_NAME);
+            p -> name[MAX_DOMAIN_NAME - 1] = 0;
        }
 
         ret = alloc_new_dom_mem(p, op.u.newdomain.memory_kb);
@@ -180,7 +180,6 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
         unsigned long  warpl   = op.u.adjustdom.warpl;
         unsigned long  warpu   = op.u.adjustdom.warpu;
         
-
         if ( dom == IDLE_DOMAIN_ID )
         {
             ret = -EPERM;
@@ -211,34 +210,35 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
 
     case DOM0_GETDOMAININFO:
     { 
-      struct task_struct *p;
-      u_long flags;
-
-      p = idle0_task.next_task;
-      read_lock_irqsave (&tasklist_lock, flags);
-      do {
-        if ((!is_idle_task (p)) && (p -> domain >= op.u.getdominfo.domain)) {
-          break;
-        }
-      } while ((p = p -> next_task) != &idle0_task);
+        struct task_struct *p;
+        u_long flags;
+
+        p = idle0_task.next_task;
+        read_lock_irqsave (&tasklist_lock, flags);
+        do {
+            if ((!is_idle_task (p)) && (p -> domain >= op.u.getdominfo.domain))
+                break;
+        } while ((p = p -> next_task) != &idle0_task);
 
-      if (p == &idle0_task) {
         ret = -ESRCH;
-      } else {
-        op.u.getdominfo.domain = p -> domain;
-        strcpy (op.u.getdominfo.name, p -> name);
-        op.u.getdominfo.processor = p -> processor;
-        op.u.getdominfo.has_cpu = p -> has_cpu;
-        op.u.getdominfo.state = p -> state;
-        op.u.getdominfo.hyp_events = p -> hyp_events;
-        op.u.getdominfo.mcu_advance = p -> mcu_advance;
-        op.u.getdominfo.pg_head = list_entry(p->pg_head.next,
-                                             struct pfn_info, list) - frame_table;
-        op.u.getdominfo.tot_pages = p -> tot_pages;
-      }
-      read_unlock_irqrestore (&tasklist_lock, flags);
-      copy_to_user(u_dom0_op, &op, sizeof(op));
-      break;
+        if ( p != &idle0_task ) 
+        {
+            op.u.getdominfo.domain      = p->domain;
+            strcpy (op.u.getdominfo.name, p->name);
+            op.u.getdominfo.processor   = p->processor;
+            op.u.getdominfo.has_cpu     = p->has_cpu;
+            op.u.getdominfo.state       = p->state;
+            op.u.getdominfo.hyp_events  = p->hyp_events;
+            op.u.getdominfo.mcu_advance = p->mcu_advance;
+            op.u.getdominfo.pg_head     = 
+                list_entry(p->pg_head.next, struct pfn_info, list) -
+                frame_table;
+            op.u.getdominfo.tot_pages   = p->tot_pages;
+        }
+
+        read_unlock_irqrestore(&tasklist_lock, flags);
+        copy_to_user(u_dom0_op, &op, sizeof(op));
+        break;
     }
 
     default:
index 3a83aa4d109f8f486669406cae02f7722fe1b27d..7938c2734b4fb10fdb802a25435dfb0fed71ef48 100644 (file)
@@ -139,7 +139,7 @@ void __kill_domain(struct task_struct *p)
     }
     else
     {
-        free_task_struct(p);
+        put_task_struct(p);
     }
 }
 
@@ -173,32 +173,33 @@ long kill_other_domain(unsigned int dom, int force)
         guest_event_notify(cpu_mask);
     }
 
-    free_task_struct(p);
+    put_task_struct(p);
     return 0;
 }
 
 void stop_domain(void)
 {
-  current -> state = TASK_SUSPENDED;
-  clear_bit(_HYP_EVENT_STOP, &(current->hyp_events));
-  schedule ();
+    current -> state = TASK_SUSPENDED;
+    clear_bit(_HYP_EVENT_STOP, &(current->hyp_events));
+    schedule ();
 }
 
 long stop_other_domain(unsigned int dom)
 {
-  unsigned long cpu_mask;
-  struct task_struct *p;
-
-  p = find_domain_by_id (dom);
-  if ( p == NULL) return -ESRCH;
-
-  if ( p -> state != TASK_SUSPENDED )
+    unsigned long cpu_mask;
+    struct task_struct *p;
+    
+    p = find_domain_by_id (dom);
+    if ( p == NULL) return -ESRCH;
+    
+    if ( p->state != TASK_SUSPENDED )
     {
-      cpu_mask = mark_hyp_event(p, _HYP_EVENT_STOP);
-      hyp_event_notify(cpu_mask);
+        cpu_mask = mark_hyp_event(p, _HYP_EVENT_STOP);
+        hyp_event_notify(cpu_mask);
     }
-
-  return 0;
+    
+    put_task_struct(p);
+    return 0;
 }
 
 unsigned int alloc_new_dom_mem(struct task_struct *p, unsigned int kbytes)
index a2ef95193614a2865886dea504b45427400dc542..242f6ccadf8562416e900932f817ac0772d2434e 100644 (file)
@@ -149,7 +149,7 @@ net_vif_t *create_net_vif(int domain)
     if ( new_vif != NULL )
         kmem_cache_free(net_vif_cache, new_vif);
     if ( p != NULL )
-        free_task_struct(p);
+        put_task_struct(p);
     return NULL;
 }
 
@@ -190,7 +190,7 @@ void destroy_net_vif(net_vif_t *vif)
     spin_unlock_irqrestore(&p->page_lock, flags);
 
     kmem_cache_free(net_vif_cache, vif);
-    free_task_struct(p);
+    put_task_struct(p);
 }
 
 void unlink_net_vif(net_vif_t *vif)
@@ -232,7 +232,7 @@ void vif_query(vif_query_t *vq)
 
     copy_to_user(vq->buf, buf, strlen(buf) + 1);
     
-    free_task_struct(p);
+    put_task_struct(p);
 }
         
 /* ----[ Net Rule Functions ]-----------------------------------------------*/
index 6536bf1ba51439c1e2f6f0a887ab16b31ab2e028..900728175fb8e4880fe14cbaa2491873b414b609 100644 (file)
@@ -477,7 +477,7 @@ asmlinkage void schedule(void)
     
     prev->policy &= ~SCHED_YIELD;
     if ( prev->state == TASK_DYING ) 
-        free_task_struct(prev);
+        put_task_struct(prev);
 
  same_process:
     /* update the domains notion of time  */
index aedbe3abcd140972a464bd6ee2f0c21beabeb85e..07738f98bf1df317b40ac9b894ca8fe8d29c4b0c 100644 (file)
@@ -129,7 +129,7 @@ static void remove_from_blkdev_list(struct task_struct *p)
     {
         list_del(&p->blkdev_list);
         p->blkdev_list.next = NULL;
-        free_task_struct(p);
+        put_task_struct(p);
     }
     spin_unlock_irqrestore(&io_schedule_list_lock, flags);
 }
@@ -169,7 +169,7 @@ static void io_schedule(unsigned long unused)
         remove_from_blkdev_list(p);
         if ( do_block_io_op_domain(p, BATCH_PER_DOMAIN) )
             add_to_blkdev_list_tail(p);
-        free_task_struct(p);
+        put_task_struct(p);
     }
 
     /* Push the batch through to disc. */
@@ -219,7 +219,7 @@ static void end_block_io_op(struct buffer_head *bh, int uptodate)
     {
         make_response(pending_req->domain, pending_req->id,
                       pending_req->operation, pending_req->status);
-        free_task_struct(pending_req->domain);
+        put_task_struct(pending_req->domain);
         spin_lock_irqsave(&pend_prod_lock, flags);
         pending_ring[pending_prod] = pending_req - pending_reqs;
         PENDREQ_IDX_INC(pending_prod);
@@ -768,7 +768,7 @@ void unlink_blkdev_info(struct task_struct *p)
     {
         list_del(&p->blkdev_list);
         p->blkdev_list.next = (void *)0xdeadbeef; /* prevent reinsertion */
-        free_task_struct(p);
+        put_task_struct(p);
     }
     spin_unlock_irqrestore(&io_schedule_list_lock, flags);
 }
index 7a1afac68a12eae1776eb0ead53a5b4905a5241b..80ec83e745e590a9ab91848530609a85e17d394e 100644 (file)
@@ -432,7 +432,7 @@ unsigned long get_wchan(struct task_struct *p);
 #define THREAD_SIZE (2*PAGE_SIZE)
 #define alloc_task_struct()  \
   ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))
-#define free_task_struct(_p) \
+#define put_task_struct(_p) \
   if ( atomic_dec_and_test(&(_p)->refcnt) ) release_task(_p)
 #define get_task_struct(_p)  \
   atomic_inc(&(_p)->refcnt)